package com.neudu.corejava.ch7.abs;

/**
 * <pre>
 * 1.使用abstract修饰的方法叫做抽象方法，抽象方法没有方法体（没有大括号）
 * 2.如果一个类包含有抽象方法，则这个类必须是抽象类
 *     注意：抽象类不一定有包含有抽象方法，即抽象类可以不包含抽象方法；
 * 3.在抽象类中，可以同时包含抽象方法和非抽象方法；
 * 4.抽象类不能使用new关键词进行实例化
 * 5.子类必须实现或重写父类的抽象方法：
 *      即当需要子类重写或实现方法时，可以把特定的方法声明为抽象方法（对应的类就是抽象类）
 * 6.//抽象类一般由非抽象的子类进行实例化，多态编程；     
 * 
 * </pre>
 * 
 * @author admin
 *
 */
//使用abstract 修饰的类叫抽象类，抽象类不能实例化
public  abstract class AbstractClass {
	private int id;
	private String name;
	
	//final和abstract不能同时修饰一个类
	//使用final修饰的类称为终结类，不能被继承，即不能存在子类；
	//使用final修饰的“变量”称为常量，常量即为在运算过程中不能为修改的“变量”；
	//属性常量需要在定义时进行初始化，常量一旦被初始化就不能够被修改；（引用不能被修改）
	//属性常量如果在定义时没有初始化，则可以在构造方法中初始化一次；
	//使用static修饰的类属性（用final修饰）一定需要在定义时初始化，一旦被初始化则不能被修改（引用不能被修改）
	//局部常量只能被赋值一次后就不能够被修改；
	public AbstractClass(int id, String name) {
		super();
		this.id = id;
		this.name = name;
	}
	
	
	public AbstractClass() {
		super();
		
	}


	//抽象方法：修饰号 abstract 返回值类型  方法名（参数列表）；-没有方法体
	//抽象方法不能使用private关键词进行修饰，其他三个访问修饰符可以，
	//抽象方法不能使用static关键词修饰；因为static修饰的为类方法，可以使用类名进行调用，而抽象的类没有方法体所；
	//抽象方法不能使用final关键词修饰，final修饰的方法不能被重修
	public abstract void absMethod();
	//使用final修饰的方法称为终结方法，终结方法不能被重写；
	public final void print() {
		System.out.println("打印方法");
	}
	public static void main(String[] args) {
		//抽象类一般由非抽象的子类进行实例化，多态编程；
		AbstractClass bAbstractClass= new SubAbstractClass();
		bAbstractClass.absMethod();
		
	}

}
